MapStruct ব্যবহার করে ডোমেইন অবজেক্ট এবং ডেটা ট্রান্সফার অবজেক্ট (DTO) এর মধ্যে ম্যাপিং করা হয়। কখনও কখনও, আপনি চাইবেন কিছু ফিল্ড ম্যাপিং থেকে বাদ দিতে, যেগুলি ডেটা ট্রান্সফার করার প্রয়োজন নেই বা কিছু নির্দিষ্ট পরিস্থিতিতে প্রয়োজনীয় নয়। MapStruct এই কাজের জন্য @Mapping অ্যানোটেশনের ignore অ্যাট্রিবিউট প্রদান করে, যা আপনাকে নির্দিষ্ট ফিল্ডগুলো ম্যাপিং থেকে বাদ দিতে সহায়তা করে।
১. @Mapping এর ignore অ্যাট্রিবিউট
@Mapping অ্যানোটেশনের ignore অ্যাট্রিবিউট ব্যবহার করে আপনি একটি নির্দিষ্ট ফিল্ড ম্যাপিং প্রক্রিয়া থেকে বাদ দিতে পারেন। যখন আপনি একটি ফিল্ড ম্যাপিং এ অন্তর্ভুক্ত করতে চান না, তখন আপনি ignore = true সেট করতে পারেন।
২. @Mapping এর ignore ব্যবহার করার উদাহরণ
ধরা যাক, আমাদের একটি Employee ডোমেইন ক্লাস এবং একটি EmployeeDTO (Data Transfer Object) ক্লাস রয়েছে। আমাদের প্রোজেক্টে কিছু ক্ষেত্র এমন থাকতে পারে যা ম্যাপিং এর জন্য প্রয়োজনীয় নয়। সেক্ষেত্রে ignore অ্যাট্রিবিউট ব্যবহার করে সেই ফিল্ড বাদ দেওয়া যেতে পারে।
উদাহরণ: Field Ignore করা
Employee.java (Domain Object):
public class Employee {
private String name;
private String department;
private int age;
private String password; // We don't need to map this field to DTO
// Getters and Setters
}
EmployeeDTO.java (DTO Object):
public class EmployeeDTO {
private String name;
private String department;
private int age;
// Getters and Setters
}
এখানে, Employee ক্লাসের password ফিল্ডটি EmployeeDTO ক্লাসে ম্যাপ করার প্রয়োজন নেই। আমরা MapStruct এর @Mapping অ্যানোটেশন ব্যবহার করে এটি বাদ দিতে পারি।
EmployeeMapper.java (Mapper Interface):
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "password", target = "password", ignore = true) // Ignoring the 'password' field
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, @Mapping অ্যানোটেশন ব্যবহার করে আমরা password ফিল্ডটি Employee থেকে EmployeeDTO তে ম্যাপ হতে বাদ দিয়েছি। ignore = true প্রপার্টি নিশ্চিত করে যে, password ফিল্ডটি ম্যাপিং প্রক্রিয়ায় অন্তর্ভুক্ত হবে না।
৩. @Mapping এর ignore ব্যবহারকারী ক্ষেত্রে
- Sensitive Data: অনেক সময় কিছু সেন্সিটিভ ডেটা (যেমন পাসওয়ার্ড) DTO তে না পাঠানোর সিদ্ধান্ত নেওয়া হয়। এমন ক্ষেত্রে,
ignore = trueব্যবহার করে সেই ফিল্ড বাদ দেওয়া হয়। - Redundant Fields: কিছু ক্ষেত্রে, ডেটা ট্রান্সফার অবজেক্টে কিছু অতিরিক্ত বা অপ্রয়োজনীয় ফিল্ড থাকতে পারে, যেগুলিকে আপনি ম্যাপিং থেকে বাদ দিতে পারেন।
- Conditional Mapping: কখনও কখনও, বিশেষ শর্তের ভিত্তিতে ফিল্ড ম্যাপিং বাদ দিতে হতে পারে। MapStruct এই ধরনের অবস্থায় কাস্টম কনভার্সন ব্যবহার করতে সহায়তা করে।
৪. Multiple Fields Ignore
এটি সম্ভব যে একাধিক ফিল্ড আপনি ম্যাপিং থেকে বাদ দিতে চান। আপনি @Mapping অ্যানোটেশন একাধিক বার ব্যবহার করতে পারেন বা একই সময় একাধিক ফিল্ডের জন্য ignore = true ব্যবহার করতে পারেন।
উদাহরণ: একাধিক ফিল্ড Ignore করা
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "password", target = "password", ignore = true)
@Mapping(source = "age", target = "age", ignore = true) // Ignoring the 'age' field
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, password এবং age ফিল্ড দুটি ম্যাপিং প্রক্রিয়া থেকে বাদ দেয়া হয়েছে।
৫. Ignore Appended Fields
একই সময় আপনি কিছু অ্যাপেন্ডেড ফিল্ডকে (যেগুলি DTO-তে অতিরিক্ত) বাদ দিতে পারেন, যেমন অতিরিক্ত মেটা ডেটা বা অপ্রয়োজনীয় তথ্য।
উদাহরণ: Ignore Appended Fields
@Mapper
public interface EmployeeMapper {
EmployeeMapper INSTANCE = Mappers.getMapper(EmployeeMapper.class);
@Mapping(source = "department", target = "department", ignore = true)
EmployeeDTO employeeToEmployeeDTO(Employee employee);
}
এখানে, department ফিল্ডটি EmployeeDTO তে ম্যাপ হতে বাদ দেয়া হয়েছে, যদি EmployeeDTO তে এই তথ্যটি প্রয়োজন না হয়।
সারাংশ
MapStruct এর @Mapping অ্যানোটেশনের ignore অ্যাট্রিবিউট ব্যবহার করে আপনি ফিল্ডগুলোকে সহজেই ম্যাপিং প্রক্রিয়া থেকে বাদ দিতে পারেন। এটি বিশেষত সেন্সিটিভ ডেটা যেমন পাসওয়ার্ড, অথবা অপ্রয়োজনীয় ফিল্ডের জন্য কার্যকরী। ignore = true প্রপার্টি ব্যবহার করার মাধ্যমে, আপনি একটি বা একাধিক ফিল্ড ম্যাপিং প্রক্রিয়া থেকে বাদ দিতে পারবেন, যার ফলে ডেটা ট্রান্সফার অবজেক্ট (DTO) কেবলমাত্র প্রয়োজনীয় ডেটা ধারণ করবে এবং আপনার অ্যাপ্লিকেশন আরও নিরাপদ এবং দক্ষ হবে।